//依赖于axios对私有ajax进行修改
import Qs from 'qs'
import axios from 'axios'
import router from 'router/index'
import {errorPrompt, loading, closeLoading} from 'util/util'
import Storage from 'util/lib/storage'

export const status = {
  SUCCESS: '100',
  NET_ERR: '101',	// 网络连接异常，请稍候再试
  BIZ_ERR: '103', // 业务请求异常
  NO_AUTH: '104'

}

export function fetch(options) {
  return new Promise((resolve, reject) => {
    let instance = axios.create({
      baseURL: process.env.BASE_API,
      timeout: 8000,
      headers: {
        "tracecode": commonBizHeader(isManager(options)),
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      transformRequest: [function (data) {
        // Do whatever you want to transform the data
        let ret = ''
        for (let it in data) {
          ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
        }
        return ret
      }]
    });

    instance.interceptors.request.use(function (response) {
      // 请求拦截
      loading();
      return response;
    }, function (error) {
      console.log('error 请求拦截 : ', error)
      return Promise.reject(error);
    });

    instance(options)
        .then(response => {
          const res = response.data;
          if (res.errorCode != status.SUCCESS) {
            switch (res.errorCode) {
              case status.NET_ERR: {
                errorPrompt(res.errorMsg)
                reject(res)
                break;
              }
              case status.BIZ_ERR: {
                errorPrompt(res.errorMsg)
                reject(res)
                break;
              }
              case status.NO_AUTH: {
                errorPrompt(res.errorMsg)
                if (isManager(options)) { // 管理端
                  Storage.remove("managerUserToken")
                  router.push({path: '/manager/login'})
                } else {
                  Storage.remove("clientUserToken")
                  router.push({path: '/client/login'})
                }
                reject(res)
                break
              }
            }
          }
          closeLoading();
          resolve(res);
        }).catch(error => {
          closeLoading();
          errorPrompt('网络连接错误，请检查您的网络')
          console.log('error', error); // for debug
          reject(error);
        });
  });
}

// export function fetch(options) {
//   return new Promise((resolve, reject) => {
//     const instance = axios.create({
//       timeout: 2000 // 超时
//     });
//     instance(options)
//         .then(response => {
//           const res = response.data;
//           resolve(res);
//         })
//         .catch(error => {
//           errorPrompt(error)
//           console.log(error); // for debug
//           reject(error);
//         });
//   });
// }

function commonBizHeader (isManager) {
  let params = {}
  params['ua'] = window.navigator.userAgent.toLowerCase()
  params['cv'] = '20170614'
  params['ws'] = window.screen.height + '*' + window.screen.width
  params['token'] = "3dwo0onUUsPKVJcP8tk"
  params['os'] = window.navigator.appCodeName
  if (isManager) {
    params['token'] = Storage.get('managerUserToken') // 管理 - 用户令牌
  } else {
    params['token'] = Storage.get('clientUserToken') // 用户 - 用户令牌
  }

  params['app'] = 'kind'

  let UUID = Storage.get('pkey')
  if (!UUID) {
    UUID = getUUID()
    window.localStorage.setItem('pkey', UUID)
  }
  return encodeURIComponent(JSON.stringify(params))
}

function isManager(options) {
  return options && options.url && options.url.indexOf("/api/worker") != -1
}

/**
 * 获取UUID
 * @returns {string}
 */
export function getUUID() {
  let len = 32 // 32长度
  let radix = 16 // 16进制
  let chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  let uuid = []
  let i
  radix = radix || chars.length
  if (len) {
    for (i = 0; i < len; i++) {
      uuid[i] = chars[0 | Math.random() * radix]
    }
  } else {
    var r
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | Math.random() * 16
        uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join('').toLowerCase()
}
